#ifndef CLAVE_H_
#define CLAVE_H_

#include <string>
#include <sstream>
#include "Dato.h"

using namespace std;

namespace Toolkit
{

//TODO documentar bien esta clase.

class Clave
{
public:

    virtual void serializar(stringstream&) const = 0;

    virtual Clave& hidratar(const stringstream &) const = 0;

    virtual bool operator == (const Clave&) const = 0;
    virtual bool operator == (const Dato&) const = 0;

    bool operator != (const Dato &dato) const
    {
        return !(*this == dato);
    }

    bool operator != (const Clave & clave) const
    {
        return !(*this == clave);
    }

    virtual bool operator < (const Clave &) const = 0;
    virtual bool operator < (const Dato &) const = 0;
};

}

#endif /* CLAVE_H_ */
